home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
mint
/
mntlib43
/
mntlib
/
purec
/
unixname
/
unixname.s
next >
Wrap
Text File
|
1994-01-15
|
7KB
|
227 lines
;{{{}}}
;{{{ about this file
; Author: Michael Schwingen
; Kranichstraße 10
; 5042 Erftstadt
; purpose:
; Unixname installes itself resident in the GEMDOS trap vector and converts
; all '/'s in filenames to TOS-like '\'.
; Assembler: DevpacST 2.0
;}}}
;{{{ List of GEMDOS-functions and address of filename on stack
; 57 (Dcreate) : 8(SP)
; 58 (Ddelete) : 8(SP)
; 59 (Dsetpath) : 8(SP)
; 60 (Fcreate) : 8(SP)
; 61 (Fopen) : 8(SP)
; 65 (Fdelete) : 8(SP)
; 67 (Fattrib) : 8(SP)
; 75 (Pexec) : 10(SP) - 8(SP) = mode, changes only if 0/3 !
; 78 (Fsfirst) : 8(SP)
; 86 (Frename) : 10(SP),14(SP)
;}}}
opt o+
start: bra init
;{{{ new trap#1 handler
DC.B "XBRAUn*x"
oldvec: DC.L 0
new_vec: move.w (sp),d0 ; get SR
lea 6(sp),a0
btst #$0D,d0 ; SUPER-mode ?
bne.s .new2 ; yes
move usp,a0 ; no, parameters are on userstack
.new2: move.w (a0),d0 ; get GEMDOS Opcode
cmp.w #57,d0 ; Dcreate() ?
beq func_type1
cmp.w #58,d0 ; Ddelete() ?
beq func_type1
cmp.w #59,d0 ; Dsetpath() ?
beq func_type1
cmp.w #60,d0 ; Fcreate() ?
beq func_type1
cmp.w #61,d0 ; Fopen() ?
beq func_type1
cmp.w #65,d0 ; Fdelete() ?
beq func_type1
cmp.w #67,d0 ; Fattrib() ?
beq func_type1
cmp.w #75,d0 ; Pexec() ?
beq func_pexec
cmp.w #78,d0 ; Fsfirst() ?
beq func_type1
cmp.w #86,d0 ; Frename() ?
beq func_frename
old_vec: movea.l oldvec,a0
jmp (a0)
func_type1: movea.l 2(a0),a0 ; ptr to filename
func1_1: bsr convert_name
bra.s old_vec
func_pexec: move.w 2(a0),d0 ; mode: 0/3 = filename at 4(a0)
cmp.w #0,d0
beq.s .pexec2
cmp.w #3,d0
bne.s old_vec
.pexec2: movea.l 4(a0),a0
bra.s func1_1
func_frename: move.l a0,-(sp)
movea.l 8(a0),a0
bsr convert_name
movea.l (sp)+,a0
bra.s func_pexec
;}}}
;{{{ convert_name: convert '/' -> '\' at (a0)+
convert_name:
move.b (a0),d0
beq .convend
cmp.b #"/",d0
bne .convnext
move.b #"\",(a0)
.convnext: addq.l #1,a0
bra.s convert_name
.convend: rts
;}}}
res_len EQU *-start
; everything after this point does not stay resident in memory
;{{{ install resident part
init: pea new_vec(pc)
move.l #$050021,-(sp) ; Setexc(33,...)
trap #13
addq.l #8,sp
move.l d0,oldvec
lea inst_txt(pc),a0
bsr Cconws
clr.w -(sp) ; Ret.-Code
move.l #256+res_len,-(sp)
move.w #49,-(sp) ; Ptermres()
trap #1
;}}}
;{{{ Cconws: print text
Cconws: move.l a0,-(sp)
move.w #9,-(sp)
trap #1 ; Cconws
addq.l #6,sp
rts
;}}}
inst_txt: DC.B 13,10,"Un*xName V1.0 © 1991 by Michael Schwingen installed.",13,10,0
;{{{}}}
;{{{ about this file
; Author: Michael Schwingen
; Kranichstraße 10
; 5042 Erftstadt
; purpose:
; Unixname installes itself resident in the GEMDOS trap vector and converts
; all '/'s in filenames to TOS-like '\'.
; Assembler: DevpacST 2.0
;}}}
;{{{ List of GEMDOS-functions and address of filename on stack
; 57 (Dcreate) : 8(SP)
; 58 (Ddelete) : 8(SP)
; 59 (Dsetpath) : 8(SP)
; 60 (Fcreate) : 8(SP)
; 61 (Fopen) : 8(SP)
; 65 (Fdelete) : 8(SP)
; 67 (Fattrib) : 8(SP)
; 75 (Pexec) : 10(SP) - 8(SP) = mode, changes only if 0/3 !
; 78 (Fsfirst) : 8(SP)
; 86 (Frename) : 10(SP),14(SP)
;}}}
opt o+
start: bra init
;{{{ new trap#1 handler
DC.B "XBRAUn*x"
oldvec: DC.L 0
new_vec: move.w (sp),d0 ; get SR
lea 6(sp),a0
btst #$0D,d0 ; SUPER-mode ?
bne.s .new2 ; yes
move usp,a0 ; no, parameters are on userstack
.new2: move.w (a0),d0 ; get GEMDOS Opcode
cmp.w #57,d0 ; Dcreate() ?
beq func_type1
cmp.w #58,d0 ; Ddelete() ?
beq func_type1
cmp.w #59,d0 ; Dsetpath() ?
beq func_type1
cmp.w #60,d0 ; Fcreate() ?
beq func_type1
cmp.w #61,d0 ; Fopen() ?
beq func_type1
cmp.w #65,d0 ; Fdelete() ?
beq func_type1
cmp.w #67,d0 ; Fattrib() ?
beq func_type1
cmp.w #75,d0 ; Pexec() ?
beq func_pexec
cmp.w #78,d0 ; Fsfirst() ?
beq func_type1
cmp.w #86,d0 ; Frename() ?
beq func_frename
old_vec: movea.l oldvec,a0
jmp (a0)
func_type1: movea.l 2(a0),a0 ; ptr to filename
func1_1: bsr convert_name
bra.s old_vec
func_pexec: move.w 2(a0),d0 ; mode: 0/3 = filename at 4(a0)
cmp.w #0,d0
beq.s .pexec2
cmp.w #3,d0
bne.s old_vec
.pexec2: movea.l 4(a0),a0
bra.s func1_1
func_frename: move.l a0,-(sp)
movea.l 8(a0),a0
bsr convert_name
movea.l (sp)+,a0
bra.s func_pexec
;}}}
;{{{ convert_name: convert '/' -> '\' at (a0)+
convert_name:
move.b (a0),d0
beq .convend
cmp.b #"/",d0
bne .convnext
move.b #"\",(a0)
.convnext: addq.l #1,a0
bra.s convert_name
.convend: rts
;}}}
res_len EQU *-start
; everything after this point does not stay resident in memory
;{{{ install resident part
init: pea new_vec(pc)
move.l #$050021,-(sp) ; Setexc(33,...)
trap #13
addq.l #8,sp
move.l d0,oldvec
lea inst_txt(pc),a0
bsr Cconws
clr.w -(sp) ; Ret.-Code
move.l #256+res_len,-(sp)
move.w #49,-(sp) ; Ptermres()
trap #1
;}}}
;{{{ Cconws: print text
Cconws: move.l a0,-(sp)
move.w #9,-(sp)
trap #1 ; Cconws
addq.l #6,sp
rts
;}}}
inst_txt: DC.B 13,10,"Un*xName V1.0 © 1991 by Michael Schwingen installed.",13,10,0